package com.headfirst.singleton.version5;

/**
 * 饿汉式单例模式：
 * 优点：不存在多线程安全性问题（即，多线程并发访问是安全的）
 * 缺点：无法做到对象的延迟加载（在实际的开发中，希望对象能尽可能地延迟加载，从而减少系统的负载）
 * 
 * 应用场景：
 * 1. 初始化单例类是就需要创建单例类的实例对象
 * 2. 初始化速度快
 * 3. 占用内存小
 * 
 */
public class Singleton_5 {

    /**
     * 使用静态初始化器创建单例对象，可以保证线程安全问题
     * 
     * 原理：依赖 JVM类加载机制，保证单例只会被创建1次，即 线程安全
     * 1. JVM在类的初始化阶段(即 在Class被加载后、被线程使用前)，会执行类的初始化
     * 2. 在执行类的初始化期间，JVM会去获取一个锁。这个锁可以同步多个线程对同一个类的初始化
     */
    private static final Singleton_5 UNIQUE_INSTANCE = new Singleton_5();
    
    private Singleton_5(){}
    
    public static Singleton_5 getInstance(){
        return UNIQUE_INSTANCE;
    }
}
